import request from '@/utils/request';
import qs from 'qs';
import type { ResponseData } from '../typing';
// 响应接口
export interface GetPropertyPageRes {
    code: number;
    data: {
        size: number;
        total: number;
        records: {
            // 主键 */
            id: number;
            // 房间号 */
            room: string;
            // 业主,多个/隔开 */
            owner: string;
            // 联系电话 */
            phone: string;
            // 身份证号 */
            idCard: string;
            // 房产类型 */
            propertyType: string;
            // 房产类型(字典项) */
            propertyTypeValue: string;
            // 注入状态:0->空置,1->入住 */
            checkIn: number;
            // 计费面积(㎡) */
            billableArea: number;
            // 是否欠费:0->否1,->是 */
            arrears: number;
            // 管家姓名 */
            housekeeper: string;
            // 是否装修:0->否,1->是 */
            renovation: number;
            // 是否出租:0->否,1->是 */
            hire: number;
            // 工单数量 */
            workOrderCnt: number;
        }[];
        current: number;
        pages: number;
    };
    msg: string;
}
export interface QueryPropertyParams {
    projectCode: string;
    buildingIds: string;
    room: string;
    keyword: string;
    arrears: string;
    workOrderCntMin: string;
    workOrderCntMax: string;
    hire: string;
    checkIn: string;
    current: number;
    size: number;
}
/**
 * 获得房产信息分页
 * @param {string} projectCode 项目code
 * @param {string} buildingIds 楼栋/单元/层ID(多个逗号隔开)
 * @param {string} room 房间号
 * @param {string} keyword 姓名/电话
 * @param {string} arrears 是否欠费:0->否1,->是
 * @param {string} workOrderCntMin 工单数量(最小)
 * @param {string} workOrderCntMax 工单数量(最大)
 * @param {string} hire 是否出租:0->否,1->是
 * @param {string} checkIn 房屋状态:0->空置,1->入住
 * @param {number} current 当前第几页(默认1)
 * @param {number} size 每页条数(默认20)
 * @returns
 */
export function getPropertyPage(params: Partial<QueryPropertyParams>): Promise<GetPropertyPageRes> {
    return request.post(`/basic/property/page`, params);
}
// 响应接口
export interface GetPropertyRes {
    code: number;
    data: {
        createTime: Record<string, unknown>;
        updateTime: Record<string, unknown>;
        creator: number;
        updater: number;
        // 主键 */
        id: number;
        // 类型:1->房产,2->车位 */
        type: number;
        // 项目ID(部门ID) */
        projectId: string;
        // 小区名 */
        residentialName: string;
        // 楼栋 */
        building: string;
        // 单元 */
        unit: string;
        // building表ID(楼层ID) */
        buildingId: number;
        // 楼层 */
        floor: string;
        // 房间号 */
        room: string;
        // 业主,多个/隔开 */
        owner: string;
        // 联系电话 */
        phone: string;
        // 身份证号 */
        idCard: string;
        // 房产类型(字典项) */
        propertyType: string;
        // 交付类型(字典项) */
        deliveryType: string;
        // 注入状态:0->空置,1->入住 */
        checkIn: number;
        // 计费面积(㎡) */
        billableArea: number;
        // 是否欠费:0->否1,->是 */
        arrears: boolean;
        // 欠费金额 */
        arrearsAmount: string;
        propertyOwner: string;
        propertyOwnerId: string;
        // 工单数量 */
        workOrderCnt: number;
        // 管家姓名 */
        housekeeper: string;
        floorId: string;
        // 是否装修:0->否,1->是 */
        renovation: boolean;
        // 是否出租:0->否,1->是 */
        hire: boolean;
    };
    msg: string;
}
/**
 * 获得房产信息
 * @param {string} id
 * @returns
 */
export function getProperty(id: string): Promise<GetPropertyRes> {
    return request.get(`/basic/property/get/${id}`);
}
/**
 * 删除房产信息
 * @param {string} id
 * @returns
 */
export function deleteProperty(id: number): Promise<ResponseData<boolean>> {
    return request.delete(`/basic/property/delete/${id}`);
}
// 参数接口
export interface UpdatePropertyParams {
    id: number;
    room: string;
    billableArea: number;
    propertyTypeValue: string;
    checkIn: number;
}
/**
 * 更新房产信息
 * @param {object} params 管理后台 - 房产信息更新 Request VO
 * @param {number} params.id 主键
 * @param {string} params.room 房间号
 * @param {number} params.billableArea 计费面积(㎡)
 * @param {string} params.propertyTypeValue 房产类型(字典项)
 * @returns
 */
export function updateProperty(params: UpdatePropertyParams): Promise<ResponseData<boolean>> {
    return request.put(`/basic/property/update`, params);
}
/**
 * 导入房产信息
 * @param {string} projectId 项目ID(部门ID)
 * @param {string} file
 * @returns
 */
export function importProperty(projectId: string, file: object): Promise<ResponseData<boolean>> {
    return request.post(`/basic/property/import/${projectId}?file=${file}`, file, {
        headers: {
            'Content-type': 'multipart/form-data',
        },
    });
}

/**
 * 导入车位信息
 * @param {string} projectCode
 * @param {string} file
 * @returns
 */
export function importParking(projectCode: string, file: object): Promise<ResponseData<boolean>> {
    return request.post(`/basic/property/import/parking/${projectCode}?file=${file}`, file, {
        headers: {
            'Content-type': 'multipart/form-data',
        },
    });
}

/**
 * 导出房产信息 Excel
 * @param {string} exportReqVO 管理后台 - 房产信息分页 Request VO
 * @returns
 */
export function exportPropertyExcel(params: Partial<QueryPropertyParams>): Promise<Blob> {
    return request.post(`/basic/property/export-excel`, params, {
        responseType: 'blob',
    });
}

/**
 * 下载房产模板
 * @param {string} projectCode 项目code
 * @param {string} buildingIds 楼栋/单元/层ID(多个逗号隔开)
 * @param {string} room 房间号
 * @param {string} keyword 姓名/电话
 * @param {string} arrears 是否欠费:0->否1,->是
 * @param {string} workOrderCntMin 工单数量(最小)
 * @param {string} workOrderCntMax 工单数量(最大)
 * @param {string} hire 是否出租:0->否,1->是
 * @param {string} checkIn 房屋状态:0->空置,1->入住
 * @param {string} current 当前第几页(默认1)
 * @param {string} size 每页条数(默认20)
 * @returns
 */
export function exportPropertyExcelTemplate(params: Partial<QueryPropertyParams>): Promise<Blob> {
    return request.post(`/basic/property/export-property-template`, params, {
        responseType: 'blob',
    });
}
/**
 * 下载车位模板
 * @param {string} projectCode 项目code
 * @param {string} buildingIds 楼栋/单元/层ID(多个逗号隔开)
 * @param {string} room 房间号
 * @param {string} keyword 姓名/电话
 * @param {string} arrears 是否欠费:0->否1,->是
 * @param {string} workOrderCntMin 工单数量(最小)
 * @param {string} workOrderCntMax 工单数量(最大)
 * @param {string} hire 是否出租:0->否,1->是
 * @param {string} checkIn 房屋状态:0->空置,1->入住
 * @param {string} current 当前第几页(默认1)
 * @param {string} size 每页条数(默认20)
 * @returns
 */
export function exportParkingExcelTemplate(params: Partial<QueryPropertyParams>): Promise<Blob> {
    return request.post(`/basic/property/export-parking-template`, params, {
        responseType: 'blob',
    });
}

/**
 * 获得房产信息
 * @param {string} id
 * @returns
 */
export function getPropertyBasic(id: number): Promise<GetPropertyRes> {
    return request.get(`/openapi/basic/property/${id}`);
}

/**
 * 楼栋-单元-楼层排序
 * @param {string} ids
 * @returns
 */
export function buildingSort(ids: string[]): Promise<ResponseData<any>> {
    return request.post(`/basic/building/sort`, ids);
}
